package com.ruoyi.common.core.domain;

import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.utils.StringUtils;
import lombok.Data;
import lombok.ToString;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Objects;

/**
 * 操作消息提醒
 * 
 * @author rakic
 * @since 24-4-10
 */
@Data
@ToString
public class BaseResponse<T> implements Serializable
{
    private static final long serialVersionUID = 1L;

    public  static final String MSG_SUCCESS = "操作成功";
    public  static final String MSG_FAIL = "操作失败";

    /** 请求序列 */
    private String seqNo;
    /** 来源系统 */
    private String formSystem;
    /** 状态码 */
    private Integer code;
    /** 返回内容 */
    private String msg;
    /** 数据对象 */
    private T data;


    /**
     * 初始化一个新创建的 AjaxResult 对象，使其表示一个空消息。
     */
    public BaseResponse()
    {
    }

    public BaseResponse(String seqNo, String formSystem, Integer code, String msg, T data) {
        this.seqNo = seqNo;
        this.formSystem = formSystem;
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    public BaseResponse(Integer code, String msg) {
        this.code = code;
        this.msg = msg;
    }

    public BaseResponse(Integer code, String msg, T data) {
        this.code = code;
        this.msg = msg;
        this.data = data;
    }

    /**
     * 返回成功消息
     * 
     * @return 成功消息
     */
    public static BaseResponse success()
    {
        return BaseResponse.success(MSG_SUCCESS);
    }
    /**
     * 返回成功消息
     *
     * @param msg 返回内容
     * @return 成功消息
     */
    public static BaseResponse success(String msg)
    {
        return BaseResponse.success(msg,null);
    }
    /**
     * 返回成功数据
     *
     * @return 成功消息
     */
    public static <T> BaseResponse<T> success(T data)
    {
        return BaseResponse.success(MSG_SUCCESS, data);
    }



    /**
     * 返回成功消息
     * 
     * @param msg 返回内容
     * @param data 数据对象
     * @return 成功消息
     */
    public static <T> BaseResponse success(String msg, Object data)
    {
        return new BaseResponse(HttpStatus.SUCCESS, msg, data);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @return 警告消息
     */
    public static BaseResponse warn(String msg)
    {
        return BaseResponse.warn(msg, null);
    }

    /**
     * 返回警告消息
     *
     * @param msg 返回内容
     * @param data 数据对象
     * @return 警告消息
     */
    public static BaseResponse warn(String msg, Object data)
    {
        return new BaseResponse(HttpStatus.WARN, msg, data);
    }

    /**
     * 返回错误消息
     * 
     * @return 错误消息
     */
    public static BaseResponse error()
    {
        return BaseResponse.error(MSG_FAIL);
    }

    /**
     * 返回错误消息
     * 
     * @param msg 返回内容
     * @return 错误消息
     */
    public static BaseResponse error(String msg)
    {
        return BaseResponse.error(msg, null);
    }

    /**
     * 返回错误消息
     * 
     * @param msg 返回内容
     * @param data 数据对象
     * @return 错误消息
     */
    public static BaseResponse error(String msg, Object data)
    {
        return new BaseResponse(HttpStatus.ERROR, msg, data);
    }

    /**
     * 返回错误消息
     * 
     * @param code 状态码
     * @param msg 返回内容
     * @return 错误消息
     */
    public static BaseResponse error(Integer code, String msg)
    {
        return new BaseResponse(code, msg);
    }


    public static BaseResponse buildResponse(Integer code, String msg, Object data){
        return new BaseResponse(HttpStatus.SUCCESS, msg, data);
    }



    /**
     * 是否为成功消息
     *
     * @return 结果
     */
    public boolean isSuccess()
    {
        return Objects.equals(HttpStatus.SUCCESS, this.getCode());
    }

    /**
     * 是否为警告消息
     *
     * @return 结果
     */
    public boolean isWarn()
    {
        return Objects.equals(HttpStatus.WARN, this.getCode());
    }

    /**
     * 是否为错误消息
     *
     * @return 结果
     */
    public boolean isError()
    {
        return Objects.equals(HttpStatus.ERROR, this.getCode());
    }


}
